#!/bin/bash

#author: Sen Du
#email: dusen.me@gmail.com
#created: 2024-04-13 20:00:00
#updated: $(date +%Y-%m-%d)

### 口播类人像视频去重及优化处理 ###

set -e 

# 搜索路径（根据你的实际路径修改）
FILEPATHS=('/Users/dusen/Editor/temp2')

# 随机数生成器
function random_int() { echo $((RANDOM % $1 + $2)); }
function random_float() { printf "%.2f" $(bc -l <<< "$RANDOM/32767*$1 + $2"); }

function generate_suffix() {
    local rand_num=$(random_int 999 1)
    local rand_char=$(printf "\x$(printf %x $((RANDOM%26+97)))")
    echo "${rand_char}${rand_num}"
}

function process_video() {
    local input="$1"
    local dir=$(dirname "$input")
    local base=$(basename "$input")
    local ext="${base##*.}"
    local name="${base%.*}"

    # 生成随机后缀（避免覆盖原文件）
    local suffix=$(generate_suffix)
    local output="${dir}/${name}_${suffix}.${ext}"

    # 随机生成干扰参数
    local noise=$(random_int 15 5)                 # 噪点强度5-20
    local blur=$(random_float 2 0.5)               # 模糊半径0.5-2.5
    local hue=$(random_int 10 0)                   # 色相偏移0-10
    local contrast=$(random_float 0.4 0.8)         # 对比度0.8-1.2
    local speed=$(random_float 0.06 0.97)          # 变速0.97-1.03x

    echo "[$(date +%Y%m%d%H%M%S)] 去重处理: $input -> $output"
    echo "参数: 噪点=$noise | 模糊=$blur | 色相=$hue | 对比度=$contrast | 速度=${speed}x"

    # FFmpeg处理命令（保持你的风格，但改用FFmpeg）
    ffmpeg -i "$input" \
        -vf "noise=alls=${noise}:allf=t,
              smartblur=${blur}:0.8:0.0,
              hue=h=${hue},
              eq=contrast=${contrast}:saturation=1.1" \
        -af "atempo=${speed}" \
        -c:v libx264 -crf $(random_int 5 18) \
        -x264-params keyint=$(random_int 30 15) \
        -b:v $(random_int 20 5)00k \
        -metadata:s:v:0 rotate=0 \
        -map_metadata -1 \
        -movflags +faststart \
        "$output" >/dev/null 2>&1

    # 可选：删除原文件（如果需要）
    # rm -f "$input"
}

function main() {
    ## 1.处理多个目录的视频
    for FILEPATH in "${FILEPATHS[@]}"; do
        echo "扫描目录: $FILEPATH"

        ## 2.查找符合条件的视频文件（保留你的过滤条件）
        files=$(find "$FILEPATH" -type f -size +10M \( -name "*.mp4" -o -name "*.MP4" -o -name "*.MTS" -o -name "*.mov" \))

        ## 3.处理每个视频
        while IFS= read -r file; do
            [ -f "$file" ] || continue  # 确保是文件

            # 处理文件名中的空格（保持你的转义逻辑）
            escapedFile="${file// /\\ }"
            process_video "$file"

        done <<< "$files"
    done
}

main
